package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.TagLinkEntity;
import com.xbongbong.saas.domain.entity.ext.CustomerEntityExt;
import com.xbongbong.saas.enums.XbbRefTypeEnum;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 标签 model
 * @author 魏荣杰
 * @date 2019/2/27 13:38
 * @since v1.0
 * @version v1.0
 */
public interface TagLinkModel extends IModel<TagLinkEntity> {

    @Override
    Integer insert(TagLinkEntity entity) throws XbbException;

    @Override
    Integer update(TagLinkEntity entity) throws XbbException;

    @Override
    List findEntitys(Map<String, Object> param);

    @Override
    Integer getEntitysCount(Map<String, Object> param);

    Integer save(TagLinkEntity tagLinkEntity) throws XbbException;
    /**
     * 清空即将返回公海池的标签
     *
     * @param corpid 公司id
     *
     * @return List<Integer> 被清空了标签的客户id列表
     * @author 章华隽
     * 创建时间： 2017/8/14 上午10:26
     * 修改时间：
     * @version
     * @since 3.11
     */
    void deleteReturnPublicTags(String corpid, Integer tagType);

    void batchInsert(ArrayList<TagLinkEntity> tagLinkList);

    void batchUpdate(ArrayList<TagLinkEntity> tagLinkList);

    /**
     * 查询自己指定标签类型的标签关联列表（只查询refId和memo）
     *
     * @param corpid  公司id
     * @param tagType 对象类型 参考XbbRefTypeEnum
     * @param refIdIn 对象ID队列
     *
     * @author 章华隽
     * 创建时间： 2017/8/25 下午05:15
     * 修改时间：
     * @version
     * @since 3.11.1
     */
    List<TagLinkEntity> getCompanyTagLinksByRefType(String corpid, Integer tagType, Collection<Long> refIdIn);

    /**
     * 根据标签类型和对象id列表删除标签关联
     *
     * @param corpid  公司Id
     * @param tagType 标签类型 参考RefTypeEnum
     * @param refIdIn 对象id列表
     *
     * @author 章华隽
     * 创建时间： 2017/8/17 上午10:26
     * 修改时间：
     * @version
     * @since 3.11
     */
    void deleteTagByTagTypeAndRefIdIn(String corpid, Integer tagType, List<Long> refIdIn);

    /**
     * 设置客户的公海标签
     * @param customerList
     * 创建时间 2019/3/8 1:44 PM
     * 修改时间 2019/3/8 1:44 PM
     * @author chy
     * @since v1.0
     * @version v1.0
     */
    void setPublicTagLink4Customer(List<CustomerEntityExt> customerList);

    /**
     * 获取公海退回标签
     *
     * @param corpid
     * @param dataIdList
     * @return 有退回标签的客户
     */
    Map<Long,String> getPublicTag(String corpid, List<Long> dataIdList);

    /**
     * 客户或线索 - 获取公海转移标签
     *
     * @param corpid
     * @param dataIdList
     * @return 有退回标签的客户
     */
    Map<Long,String> getTransferTag(String corpid, List<Long> dataIdList,Integer refType);


    Map<Long,String> getCluePublicTag(String corpid, List<Long> dataIdList);

    /**
     * 获取公海退回标签
     *
     * @param corpid
     * @param dataIdList
     * @param businessType 业务类型
     * @return 有退回标签的业务
     */
    Map<Long, TagLinkEntity> getPublicTagLink(String corpid, Collection<Long> dataIdList, Integer businessType);

    /**
     * 根据对象id获取指定标签类型的标签
     * @param corpid 公司id
     * @param tagType 标签类型 参考RefTypeEnum
     * @param refId   对象id
     *
     * @return TagLinkEntity 标签
     * @author 章华隽
     * 创建时间： 2017/8/15 上午10:26
     * 修改时间：
     * @version
     * @since 3.11
     */
    TagLinkEntity getTagByTagType(String corpid, Integer tagType, Long refId);

    /**
     * 获取即将退回公海客户idList
     * @param corpid
     * @param businessType
     * @return
     */
    List<Long> getPublicCustomerIdList(String corpid, Integer businessType);
}
